package models;

import java.math.BigDecimal;
import java.util.*;

import javax.persistence.*;

import play.data.format.Formats;
import play.data.validation.Constraints.Required;
import play.db.ebean.*;

@Entity
public class Produit extends Model {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	public Long id;

	@Required
	@Column(unique=false)
	public String label;

	@Required
	@Column(scale=2)
	public BigDecimal prix;

	@Formats.DateTime(pattern="dd-mm-yyyy")
	public Date dateFab;

	@ManyToOne
	@JoinColumn(name="TYPE_ID")
	public Type typeProd;

	@OneToMany(mappedBy="prod", cascade=CascadeType.ALL)
	public List<Caracteristique> lCaracteristique;
	
	@OneToMany(mappedBy="prod", cascade=CascadeType.ALL)
	public List<OptionConfig> lOptions;
		
	@Formats.DateTime(pattern="dd-mm-yyyy")
	public Date dateLiv;
	
//
//	@ManyToMany(mappedBy="produits")
//	public List<Proposition> propositions;
	
	@OneToMany(mappedBy = "produit", cascade = CascadeType.ALL)
	public List<ProduitProposition> propositions;
	
	/**
	 * @param label
	 * @param prix
	 */
	public Produit(String label, BigDecimal prix) {
		super();
		this.label = label;
		this.prix = prix;
		//this.propositions.add(prop);
	}

	public static Finder<String, Produit> findNom =new Finder<String, Produit>(String.class, Produit.class);

	public static Finder<Long,Produit> find = new Finder<Long, Produit>(
			Long.class, Produit.class
			);

	public static List<Produit> all() {
		return find.all();
	}

	public void create(Produit prod, Long id) {
		
		ProduitProposition association=new ProduitProposition();
		Proposition proposit=Proposition.find.byId(id);
		association.proposition=proposit;
		association.produit=this;
		association.produitId=this.id;
		association.propositionId=proposit.id;
		association.prix=prod.prix;
		
		prod.propositions.add(association);
		
		proposit.save();
		
		prod.save();
	}

	public static void delete(Long id) {
		find.ref(id).delete();
	}

	public static Map<String,String> options(Long id) {
		LinkedHashMap<String,String> options = new LinkedHashMap<String,String>();
		Produit c=Produit.find.byId(id);
		options.put(c.id.toString(), c.label);
		return options;
	}
}